//package com.example.demo1.filter;
//
//import com.alibaba.fastjson.JSON;
//import com.netflix.zuul.ZuulFilter;
//import com.netflix.zuul.context.RequestContext;
//import com.sino.crmcommon.commonResponse.ResponseCode;
//import com.sino.crmcommon.commonResponse.ServerResponse;
//import com.sino.crmcommon.token.JwtUtil;
//import org.springframework.stereotype.Component;
//import org.springframework.util.StringUtils;
//
//import javax.servlet.http.HttpServletRequest;
//import javax.servlet.http.HttpServletResponse;
//import java.io.IOException;
//
///**
// * Created by rubin on 2018/7/6.
// */
//
//@Component
//public class CrmFilter extends ZuulFilter {
//    @Override
//    public String filterType() {
//        return "pre";
//    }
//    @Override
//    public int filterOrder() {
//        return 0;
//    }
//    @Override
//    public boolean shouldFilter() {
//        RequestContext ctx = RequestContext.getCurrentContext();
//        HttpServletRequest request = ctx.getRequest();
//        String uri = request.getRequestURI();
//        if(uri.matches("/api-.*")
//                && (!"/api-system/login".equals(uri))
//                && (!"/api-system/doLogin".equals(uri))
//                && (!"/api-system/doLogin4oa".equals(uri))
//                && (!"/api-system/".equals(uri))
//                && (!"/api-system/main".equals(uri))
//                && (!"/api-mail/emailFollowTrail".equals(uri))){
//            return true;
//        }
//        return false;
//    }
//
//    @Override
//    public Object run() {
//        RequestContext ctx = RequestContext.getCurrentContext();
//        HttpServletRequest request = ctx.getRequest();
//        HttpServletResponse response = ctx.getResponse();
//        String accessToken = request.getHeader("Authorization");
//        if(StringUtils.isEmpty(accessToken)){
//            accessToken = request.getParameter("Authorization") + "";
//        }
//        response.setContentType("application/json;charset=UTF-8");
//        try {
//            if(StringUtils.isEmpty(accessToken) || "null".equals(accessToken)){
//                ctx.setSendZuulResponse(false);
//                ctx.setResponseStatusCode(200);
//                response.getWriter().write(JSON.toJSONString(ServerResponse.createByErrorCodeMessage(ResponseCode.NEED_LOGIN.getCode(), ResponseCode.NEED_LOGIN.getDesc())));
//                return false;
//            }
//            if(JwtUtil.dececodeToken(accessToken) == null){
//                ctx.setSendZuulResponse(false);
//                ctx.setResponseStatusCode(200);
//                response.getWriter().write(JSON.toJSONString(ServerResponse.createByErrorCodeMessage(ResponseCode.TOKEN_DATED.getCode(), ResponseCode.TOKEN_DATED.getDesc())));
//                return false;
//            }
//        } catch (Exception e) {
//            ctx.setSendZuulResponse(false);
//            ctx.setResponseStatusCode(200);
//            try {
//                response.getWriter().write(JSON.toJSONString(ServerResponse.createByErrorCodeMessage(ResponseCode.ERROR.getCode(), ResponseCode.ERROR.getDesc())));
//                return false;
//            } catch (IOException e1) {
//                e1.printStackTrace();
//                return false;
//            }
//        }
//        ctx.setSendZuulResponse(true);
//        return true;
//    }
//}
